//异步操作   setTimeout ， 图片加载  ， ajax异步读取 ， 写文件
//消消乐

// function play(Key,time,callback){
//     setTimeout(() => {
//         Key++;//第二关的要是
//         callback(Key)
//     }, time);
// }
// //回调地狱
// play(1,1000,(two)=>{
//     console.log('第二关的钥匙',two)
//     play(two,2000,(three)=>{
//         console.log('第二关的钥匙',three)
//         play(three,2000,(four)=>{
//             console.log('第二关的钥匙',four)
//         })
//     })
// })
//Promise  密闭的容器  里面放着未来才会发生的事件

//构造函数 new Promise((resolve ,reject)=>{

// })
/*
* let pl = new Promise()
* .then(()=>{成功状态触发},()=>{失败状态触发})
* .catch(()=>{失败触发})
* .finally(()+>{都会触发的函数 })
* 1. 三个状态  进行总 pending  已成功 fulfilled  已失败 rejected
* 2. 特点
*    状态一旦发生改变 就不会在变
     状态改变不受外界影响
*/

// function fun(key,time){
//     return new Promise((resolve,reject)=>{
//         setTimeout(() => {
//             key++;
//             resolve(key)
//             reject('error')
//         }, time);
//     })
// }
// fun(1,1000).then((two)=>{
//     console.log(two)
//     return fun(two,2000)
// },(reject)=>{
//     console.log(reject)
// }).then(three=>{
//     console.log(three)
//     return fun(three,2000)
// }).then(four=>{
//     console.log(four)
//     // return fun(four,2000)
// })

//切菜 
//烧水
// function cut(){
//     return new Promise((resolve,reject)=>{
//         setTimeout(() => {
//             resolve('切菜')
//         }, 2000);
//     })
// }
// function water(){
//     return new Promise((resolve,reject)=>{
//         setTimeout(() => {
//             resolve('烧水')
//         }, 2000);
//     })
// }
// // Promise.all  都执行完 才会触发  用在 请求
// Promise.all([cut(),water()]).then(res=>{
//     console.log('准备工作完成',res)
// }).catch(error=>{
//     console.log(error)
// })
// function waterD(){
//     return new Promise((resolve,reject)=>{
//         setTimeout(() => {
//             resolve('电')
//         }, 500);
//     })
// }
// function waterM(){
//     return new Promise((resolve,reject)=>{
//         setTimeout(() => {
//             resolve('煤气')
//         }, 2000);
//     })
// }
// // Promise.race  其中一个完成就是完成
// Promise.race([waterD(),waterM()]).then(res=>{
//     console.log('其中一个完成',res)
// })

//async  await es7 引进的异步编程方案
/**
 *                  调用方式    返回值
 * 
 * async 函数        run()      Promise对象
 * 
 * 普通函数           run()      return 值
 * 
 * 
 */
function player(Key,time){
    return new Promise((resolve,reject)=>{
        setTimeout(() => {
            Key++;
            resolve(Key)
        }, time);
    })
}
async function run(){
   let two = await player(1,1000)
   console.log(two)
   let three = await player(two,1000)
   console.log(three)
   let four = await player(three,1000)
   console.log(four)
}
console.log(run())

